// 也可以字面量进行类型声明
let a: 10;
a=10;
// d = 11;//报错

// 可以使用|连接多个类型(联合类型)
let b: "male" |"felmale"
 b= "male";
 b = "felmale";

 let c:boolean |string;
 c=true;
 c="hello"


// any 表示的是任意类型，一个变量设置类型为any后期相当于该变量关闭了TS类型的检测
// 使用TS时，不建议使用any类型
// 声明变量不赋值，不指定类型，则TS会默认为any
let d:any;
d=10;
d="hello";
d=true;


// unknown;表示未知类型的值
// unknown类型变量，实际上类型安全any,不能直接赋值给其他变量
let e:unknown;
e=10;
e='hello'
e=true;


let s:string;
// d的类型是any ，它可以赋值给任意变量
// s=d;
e='hello'
// s=e;报错 e是未知类型

// 类型断言，可以用来告诉解析器变量的实际类型
/*
 语法：
  变量 as 类型
  <类型>变量
*/ 
s=e as string;
s=<string>e;

// void 用来表示空，以函数为例，就表示没有返回值的函数
function fn(): void{
    // return undefined 
    return null 
}

// never 表示永远不会返回结果
function fn2():never{
   
    throw new Error("报错了"!);
}
